package com.hqyj.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hqyj.pojo.R;
import com.hqyj.pojo.UserInfo;
import com.hqyj.dao.UserInfoMapper;
import com.hqyj.service.UserInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hqyj.util.MdFive;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.UUID;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author rock
 * @since 2023-02-23 10:16:15
 */
@Service
@Slf4j
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements UserInfoService {

    // @Resource 一般用于注入dao层
    @Resource
    UserInfoMapper userInfoMapper;
    @Autowired
    MdFive mdFive;

    @Override
    public R register(UserInfo userInfo) {
        log.info("---------验证用户名是否重名----------");
        //创建条件构造器对象
        QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
        //定义根据用户名查询的条件语句
        queryWrapper.eq("user_name",userInfo.getUserName());
        //调用查询方法
        UserInfo u =userInfoMapper.selectOne(queryWrapper);
        if(u!=null){
            log.info("用户名重名");
            return R.error("用户名重名");
        }
        log.info("---------验证手机是否重名----------");
        //创建条件构造器对象
        QueryWrapper<UserInfo> queryWrapper1 = new QueryWrapper<>();
        //定义根据用户名查询的条件语句
        queryWrapper1.eq("user_phone",userInfo.getUserPhone());
        //调用查询方法
        UserInfo u1 =userInfoMapper.selectOne(queryWrapper1);
        if(u1!=null){
            log.info("手机不能相同");
            return R.error("手机不能相同");
        }
        log.info("---------验证邮箱是否相同----------");
        //创建条件构造器对象
        QueryWrapper<UserInfo> queryWrapper2 = new QueryWrapper<>();
        //定义根据用户名查询的条件语句
        queryWrapper2.eq("user_email",userInfo.getUserEmail());
        //调用查询方法
        UserInfo u2 =userInfoMapper.selectOne(queryWrapper2);
        if(u2!=null){
            log.info("邮箱不能相同");
            return R.error("邮箱不能相同");
        }
        log.info("--------密码加密------");
        //生成一个盐值
        String salt = UUID.randomUUID()+"";
        //加密密码
        String pwd = mdFive.getPassword(userInfo.getUserPwd(),salt);
        //设置密码和盐值
        userInfo.setUserPwd(pwd);
        userInfo.setUserSalt(salt);
        //新增
        int num = userInfoMapper.insert(userInfo);
        if(num ==0 ){
            log.info("注册失败");
            return R.error("注册失败");
        }
        log.info("----注册成功----");
        return R.ok("注册成功");
    }
}
